﻿import core.hgeall;


class	Myclass: hgeSceneObj
{
	ifHge			hge;
	hgeSprite 		spr;
	hgeFontCN		fnt;		//使用纹理汉字
	hgeFontCN2		fnt2;		// 顶点画字模

	float dx,dy;
	bool	state;

	this(){
		super("场景1");
		hge= gameInfo.hge;
		
		HTEXTURE tex=gameInfo.res.tex_load( r"res\2.png");
       
		fnt =new hgeFontCN(r"res\font_cn.sbin");
		fnt2 =new hgeFontCN2(r"res\zm.bitfont");
        spr =new hgeSprite(tex , 96, 64, 32, 32);
        spr.SetColor(0xFFFFA000);
        spr.SetHotSpot(16,16);

	}
 
    bool update() {
		static bool bdown;
        if ( hge.Input_GetKeyState( HGEK_ESCAPE)) return true;

		if (hge.Input_GetKeyState(HGEK_SPACE))  
			bdown=true;
		else if(bdown)
		{
			bdown =false;
			state= !state;
		}

        hge.Input_GetMousePos(&dx,&dy);
        return false;
    }
	
    bool draw() {	
        hge.Gfx_Clear( 0xffffffff);
		
        spr.Render(dx,dy);
	   
		fnt.SetColor(0xff0000ff);	fnt2.SetColor(0xffff0000);
		fnt.printf(100,10,HGETEXT_LEFT," fps = ",hge.Timer_GetFPS());

		
		if(state){
			fnt.printf(300,10,HGETEXT_LEFT,"现在是使用纹理汉字,使用 SPACE 键切换显示方式");
			//fnt.SetScale(1.4);
			fnt.printf(dx,dy,HGETEXT_LEFT, rTxt );
		}else{
			fnt2.printf(300,10,HGETEXT_LEFT,"现在是使用顶点画汉字,使用 SPACE 键切换显示方式");
			fnt2.SetScale(1.4);
			fnt2.printf(dx,dy,HGETEXT_LEFT, rTxt );
		}

        return false;
    }

	char[] rTxt= r"
令狐冲向厅内瞧去，只见宾位上首坐着一个身材高大的瘦削老者，
右手执着五岳剑派师兄不必和小孩子们一般见识。”回过头来，
向令狐冲斥道：“你胡说八道，还不快向鲁师伯赔礼？
也就是我们循环处理精灵的每个像素，如果此像素的颜色是不透明
的，就画上去。因为检查一个值是否为0比判断其是否为一个特定的
非零值要快，所以0经常被用来作为透明色。
但是即使这个方法能不错地完成任务——能画出任意形状的精灵，
可以做到不往屏幕外画点，它仍然是一个慢速且糟糕的画精灵的方法。
这个方法的第一个问题是：对每一个你要画的点，你都得去判断它是
否透明，如果是就不去画它。这就意味着你要在这里花大量的精力，
而这可以通过采用一些好的方法来避免。如果开始的时候采用了一个
坏的算法，那么任何一种优秀的语言都帮不了你。
让我们先从理论出发，考虑一下画一个精灵可以多快的理论极限。
然后我们可以根据我们所采用的方法得到的结果与此极限的接近程
度来判断方法的优劣。
如果我们在画精灵时根本不用去判断任一像素是否透明，那么这种方
法是最快的。在这种情况下，我们只需简单地把要画的像素一个接一
个地画上去直到停止。你不需为循环和比较作出开销。有一种方法可
以允许你做到这一点，称为“编译好的精灵”。“编译好的精灵”实
际上是一段往屏幕上画精灵的程序，就象这样：
令狐冲向厅内瞧去，只见宾位上首坐着一个身材高大的瘦削老者，
右手执着五岳剑派师兄不必和小孩子们一般见识。”回过头来，
向令狐冲斥道：“你胡说八道，还不快向鲁师伯赔礼？
也就是我们循环处理精灵的每个像素，如果此像素的颜色是不透明
的，就画上去。因为检查一个值是否为0比判断其是否为一个特定的";

}

void main() {
    gameInfo gi= gameInfo.getInstance();

    gi.setVideo(640,480,32);
    gi.setStr("sample1","sample1.log");
    try {
        gi.init();
        gi.run(new Myclass);

    } catch (Exception e) {
        mes("主程异常:	",e);
    } finally {
        delete gi;

    }


}